class Solution:
    def maximumSwap(self, num: int) -> int:
        num_list = list(str(num))
        last = {int(x): i for i, x in enumerate(num_list)}

        for i, x in enumerate(num_list):
            for d in range(9, int(x), -1):
                if d in last and last[d] > i:
                    num_list[i], num_list[last[d]] = num_list[last[d]], num_list[i]
                    return int(''.join(num_list))
        return num
if __name__ == '__main__':
    s = Solution()
    print(s.maximumSwap(2736))

# 原理：
# 转为字符串方便交换： list(str(num)) 将整数转换为字符串列表，便于逐位操作和交换；
# 记录每个数字最后出现的位置： 通过哈希表 last = {int(x): i} 构建从数字到其最后下标的映射；
# 从高位向低位遍历： 每一位数字 x，尝试寻找比它大的数字（从 9 开始递减），且这个更大的数字出现在后面；
# 若找到： 立即交换，返回新整数；
# 若找不到更大的数字： 原数就是最大数，直接返回。